// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.geocities.com/kpdus/jad.html // Decompiler options: braces fieldsfirst space lnc package com.xiaomi.account.openauth; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.text.TextUtils; import com.xiaomi.account.openauth.utils.Base64Coder; import com.xiaomi.account.openauth.utils.Network; import java.net.URL; import java.net.URLEncoder; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Random; import java.util.Scanner; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import org.apache.http.NameValuePair; import org.apache.http.client.utils.URLEncodedUtils; import org.apache.http.message.BasicNameValuePair; // Referenced classes of package com.xiaomi.account.openauth: // AuthorizeActivity, b public class AuthorizeHelper { protected static final String ACTION_AUTH_ACTIVITY = "com.xiaomi.account.openauth.action.AUTH"; protected static final String AUTHORIZATION_CODE = "authorization_code"; public static String AUTH_ACTIVITY_NAME = "com.xiaomi.account.openauth.AuthorizeActivity"; protected static final String HEADER_FLAG = "&&&START&&&"; public static final String OAUTH2_HOST = "https://account.xiaomi.com"; protected static final String REFRESH_TOKEN = "refresh_token"; protected static final String TOKEN_PATH = "https://account.xiaomi.com/oauth2/token"; private static final String a = "HmacSHA1"; private static final String b = "UTF-8"; private static Random c = new Random(); public AuthorizeHelper() { } private static Intent a(Context context) { Intent intent = new Intent(); intent.setClass(context, com/xiaomi/account/openauth/AuthorizeActivity); return intent; } protected static HashMap buildMacRequestHead(String s, String s1, String s2) { Object aobj[] = new Object[3]; aobj[0] = URLEncoder.encode(s, "UTF-8"); aobj[1] = URLEncoder.encode(s1, "UTF-8"); aobj[2] = URLEncoder.encode(s2, "UTF-8"); String s3 = String.format("MAC access_token=\"%s\", nonce=\"%s\",mac=\"%s\"", aobj); HashMap hashmap = new HashMap(); hashmap.put("Authorization", s3); return hashmap; } protected static String encodeSign(byte abyte0[]) { return new String(Base64Coder.encode(abyte0)); } protected static byte[] encryptHMACSha1(byte abyte0[], byte abyte1[]) { SecretKeySpec secretkeyspec = new SecretKeySpec(abyte1, "HmacSHA1"); Mac mac = Mac.getInstance("HmacSHA1"); mac.init(secretkeyspec); mac.update(abyte0); return mac.doFinal(); } protected static String generateNonce() { long l = c.nextLong(); int i = (int)(System.currentTimeMillis() / 60000L); return (new StringBuilder(String.valueOf(l))).append(":").append(i).toString(); } protected static String generateUrl(String s, List list) { if (list == null || list.size() <= 0) goto _L2; else goto _L1 _L1: android.net.Uri.Builder builder; Iterator iterator; builder = Uri.parse(s).buildUpon(); iterator = list.iterator(); _L6: if (iterator.hasNext()) goto _L4; else goto _L3 _L3: s = builder.build().toString(); _L2: return s; _L4: NameValuePair namevaluepair = (NameValuePair)iterator.next(); builder.appendQueryParameter(namevaluepair.getName(), namevaluepair.getValue()); if (true) goto _L6; else goto _L5 _L5: } protected static String getAccessTokenByAuthorizationCode(Context context, String s, long l, String s1, String s2) { ArrayList arraylist = new ArrayList(); arraylist.add(new BasicNameValuePair("client_id", String.valueOf(l))); arraylist.add(new BasicNameValuePair("grant_type", "authorization_code")); arraylist.add(new BasicNameValuePair("client_secret", s1)); arraylist.add(new BasicNameValuePair("token_type", "mac")); arraylist.add(new BasicNameValuePair("redirect_uri", s2)); arraylist.add(new BasicNameValuePair("code", s)); String s3 = Network.downloadXml(context, new URL(generateUrl("https://account.xiaomi.com/oauth2/token", arraylist))); if (!TextUtils.isEmpty(s3)) { s3 = s3.replace("&&&START&&&", ""); } return s3; } protected static String getAccessTokenByRefreshToken(Context context, String s, long l, String s1, String s2, String s3, String s4, String s5) { ArrayList arraylist = new ArrayList(); arraylist.add(new BasicNameValuePair("client_id", String.valueOf(l))); arraylist.add(new BasicNameValuePair("grant_type", "refresh_token")); arraylist.add(new BasicNameValuePair("client_secret", s1)); arraylist.add(new BasicNameValuePair("token_type", "mac")); arraylist.add(new BasicNameValuePair("redirect_uri", s2)); arraylist.add(new BasicNameValuePair("refresh_token", s)); arraylist.add(new BasicNameValuePair("token_type", s3)); arraylist.add(new BasicNameValuePair("mac_key", s4)); arraylist.add(new BasicNameValuePair("mac_algorithm", s5)); String s6 = Network.downloadXml(context, new URL(generateUrl("https://account.xiaomi.com/oauth2/token", arraylist))); if (!TextUtils.isEmpty(s6)) { s6 = s6.replace("&&&START&&&", ""); } return s6; } protected static String getMacAccessTokenSignatureString(String s, String s1, String s2, String s3, String s4, String s5, String s6) { if ("HmacSHA1".equalsIgnoreCase(s6)) { StringBuilder stringbuilder = new StringBuilder(""); stringbuilder.append((new StringBuilder(String.valueOf(s))).append("\n").toString()); stringbuilder.append((new StringBuilder(String.valueOf(s1.toUpperCase()))).append("\n").toString()); stringbuilder.append((new StringBuilder(String.valueOf(s2))).append("\n").toString()); stringbuilder.append((new StringBuilder(String.valueOf(s3))).append("\n").toString()); if (!TextUtils.isEmpty(s4)) { StringBuffer stringbuffer = new StringBuffer(); ArrayList arraylist = new ArrayList(); URLEncodedUtils.parse(arraylist, new Scanner(s4), "UTF-8"); Collections.sort(arraylist, new b()); stringbuffer.append(URLEncodedUtils.format(arraylist, "UTF-8")); stringbuilder.append((new StringBuilder(String.valueOf(stringbuffer.toString()))).append("\n").toString()); } return encodeSign(encryptHMACSha1(stringbuilder.toString().getBytes("UTF-8"), s5.getBytes("UTF-8"))); } else { throw new NoSuchAlgorithmException((new StringBuilder("error mac algorithm : ")).append(s6).toString()); } } protected static void startAuthorizeActivityForResult(Activity activity, long l, String s, String s1, String s2, String s3, int i) { if (l < 0L) { throw new IllegalArgumentException("client id is error!!!"); } if (TextUtils.isEmpty(s)) { throw new IllegalArgumentException("redirect url is empty!!!"); } if (TextUtils.isEmpty(s1)) { throw new IllegalArgumentException("responseType is empty!!!"); } else { Intent intent = a(activity); intent.setPackage(activity.getPackageName()); Bundle bundle = new Bundle(); bundle.putString("client_id", String.valueOf(l)); bundle.putString("redirect_uri", s); bundle.putString("response_type", s1); bundle.putString("scope", s2); bundle.putString("state", s3); intent.putExtra("url_param", bundle); activity.startActivityForResult(intent, i); return; } } }